<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 1. const声明的常量真的一点都不能修改吗？
        const obj = {
            name:'mikaisa',
            age:18
        }

        // 其实不是, const所保护的只是常量在内存中的地址值，如果该常量是个引用类型，那么你去修改它里面的属性是不会触发保护机制的。但是如果常量本身是个基本数据类型或者说你试图把一个引用数据类型的常量变为基本数据类型的值，那就会报错
        // obj = '123';//报错
        obj.name = 'mkss';//不报错且生效



        // 2. 我就想声明的常量不管怎么样都不能被改变，应该怎么办？

        // 使用Object.freeze()方法配合一下即可，该方法的作用就是冻结对象中的每个属性。但是该方法有个致命的缺陷，就是只能冻住第一层，里面嵌套的引用数据类型是冻不住的，所以必要时刻需要递归处理
        const obj2 = Object.freeze({
            name:'mikaisa',
            age:18
        });
        obj2.name = 'mks2';//不会引发任何报错，但是这个赋值不会生效
    </script>
</body>
</html>